Relaciones entre clases

Asociación entre clases

Una asociación representa algún tipo de relación semántica entre clases en el dominio del problema.

Untitled Diagram.drawio (1)

Al modelar las clases y sus relaciones, también podemos representar las restricciones sobre el número de instancias que pueden participar en la asociación, esto se conoce como multiplicidad de la asociación.

Ejemplo:

Departamento_profesor

 

Esto significa que Profesor sólo puede pertenecer a un departamento, pero Departamento puede tenen n Profesores.

La implementación depende de la multiplicidad de la asociación:

Implementación en JAVA

Una relación de una clase con otra se codifica en la declaración de la clase mediante refererncias a un tipo de objeto de la otra clase.

 

MultiplicidadSignificado
1Uno y sólo uno.
0...10 o 1 como máximo
0...n o *0 o n como máximo
1...*1 como mínimo y n como máximo

 

La navegabilidad puede ser de dos tipos:

Curso_Asignatura;unidireccional

 

Curso_Asignatura;bidireccional

 

Implementación unidireccional en JAVA

profesor_pais_departamento

 

Tipos de asociaciones entre clases

Las asociaciones pueden ser de difentes tipos según el dominio del problema que se desea resolver:

Asociación

es una relación simple entre clases que especifica que los objetos de un elementos están unidos con los objetos de otro. Se puede navegar de uno a otro y viceversa.

Director_Departamento

Puede indicarse la dirección de la asociación con una flecha en caso de ser unidireccional.

Persona_Mascota Persona tiene una mascota

 

Reflexiva

Cuando una clase esta asociada consigo misma, cuando una clase puede desempeñar varios roles:

Empleado Empleado dirige a empleado

Carpeta Carpeta contiente carpetas

 

Agregación

Es una variante de la relación de asociación, es cuando un objeto queda caracterizado por la agrupación de otros objetos en su estructura. Objeto B es parte del objeto A o A tiene un B

Zoo_Animal Zoo contiene animales, pero si el Zoo deja de existir, los animales seguirán existiendo.

La agregación representa un todo y sus partes.

Todo_Partes

 

Composición

Es una relación de agregación donde las partes no pueden existir fuera del todo.

Edificio_Pisos Sin Edificio no pueden existir los pisos.

 

Agregación es una relación debil.

Composición es una relación fuerte.

 

Herencia

Es una relación entre clases en la que la clase padre comparte su estructura y comportamiento con la clase hija. (La clase hija hereda de la clase padre).

Herencia

Cada subclase incluira el comportamiento y las características de la superclase, salvo que los predefina la propia clase.

Al estender una clase, se heredan todas las funciones y los atributos de la clase padre (publicos y protected), y se pueden añadir nuevas funciones y atributos.

Visivilidad de los atributos:

Visivilidad
Desde la propia clase
Desde las subclases
Desde cualquier clase
- Privado private v x x
+ Publico public v v v
# Protegido protected v v x

 

Principio de sustitución de Liskov: (Generalización)

Si S es un subtipo de T, entonces los objetos del tipo T en un programa de coputadora pueden ser sustituidos por objetos del tipo S sin alternar ninguna de las propiedades de ese programa.

Para que esto se cumpla, la sublcase ha de comportarse como la superclase.

Ejemplo:

Herencia_abstracta

Cada subclase implementa su propia versión de los métodos abrir, cerrar y ejecutar.

En este caso, las funciones de la superclase no se pueden implementar, porque no sabemos con que base de datos se va a trabajar, entonces, la implementación de esos métodos las realizarán las subclases, cada una de ellas con su tipo de implementación.

 

Clases abstractas

Son clases que no pueden dar implemantación a alguno de sus métodos.

Las clases abstractas no se pueden utilizar para crear objetos, debe hacerse desde las clases hijas.

El cuerpo de los métodos de la clase abstracta lo proporciona la subclase.

Sirven como esquemas conceptuales reutilizables y organizativos.

Las subclases de la clase abstracta deben dar implementación a los métodos abstractos definidos en la clase abstracta.

 

Interface

Una interface es una clase abstracta que no proporciona implementación a ninguno de sus métodos.

Su ventaja es que permite la herencia múltiple.

Interface

 

Polimorfismo

Es cuando usamos el mismo método con multiples implementaciones en varias clases.

Polimorfismo

El polimorfismo se basa en dos propiedades:

Ejemplo:

Ejemplo_polimorfismo

 

Ligadura de métodos

Es el proceso de asociación de un atributo a un valor.

Si la propiedad se limita a funciones, la ligadura es la conexión entre la llamada a una función y el código que se ejecuta tras la llamada.

La ligaduras se clasifican segun su tiempo de ligadura:

Ejemplo:

Cuando llamamos a la función obtenerAreaTotal( ), nuestro programa llama al área de la figura que le toca en cada momento.